package com.atguigu.jxc.service;

import com.atguigu.jxc.domain.ServiceVO;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.entity.GoodsTypeVo;

import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;

public interface GoodsService {


    ServiceVO getCode();


    //获取全部
    List<GoodsTypeVo> getGoodstypes() ;
    /**
     * 分页查询商品库存信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param codeOrName 商品编码或名称
     * @param goodsTypeId 商品类别ID
     * @return
     */
    Map<String, Object> getlistInventory(Integer page, Integer rows, String codeOrName, Integer goodsTypeId);

    /**
     * 分页查询商信息
     * @param page
     * @param rows
     * @param goodsName
     * @param goodsTypeId
     * @return
     */
    Map<String, Object> getlist(Integer page, Integer rows, String goodsName, Integer goodsTypeId);

    /**
     * 增加分类
     * @param goodsTypeName
     * @param pId
     */
    void save(String goodsTypeName, Integer pId);

    /**
     *
     * 删除分类
     * @param goodsTypeId
     */
    void delete(Integer goodsTypeId);

    /**
     * 增加商品
     * @param goods
     */
    void saveOrUpdateGoods(Goods goods);

    /**
     * 删除商品并判断条件
     * @param goodsId
     * @return
     */
    ServiceVO deleteGoods(Integer goodsId);

    /**
     * 查询无库存的商品
     * @param page
     * @param rows
     * @param nameOrCode
     * @return
     */
    Map<String, Object> getNoInventoryQuantity(Integer page, Integer rows, String nameOrCode);
    /**
     * 分页查询有库存商品信息
     * @param page 当前页
     * @param rows 每页显示条数
     * @param nameOrCode 商品名称或商品编码
     * @return
     */

    Map<String, Object> getHasInventoryQuantity(Integer page, Integer rows, String nameOrCode);

    /**
     * 修改库存和进货价
     * @param inventoryQuantity
     * @param purchasingPrice
     * @param goodsId
     * @return
     */
    ServiceVO saveStock(Integer inventoryQuantity, double purchasingPrice, Integer goodsId);

    ServiceVO deleteStock(Integer goodsId);
    //库存预警
    Map<String, Object> listAlarm();
}
